package com.yami.shop.service.impl;


import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yami.shop.bean.model.Product;
import com.yami.shop.bean.model.User;
import com.yami.shop.bean.pt.YxCtjl;
import com.yami.shop.bean.pt.YxPtgl;
import com.yami.shop.bean.pt.YxPtsp;
import com.yami.shop.common.util.PageAdapter;
import com.yami.shop.dao.YxCtjlMapper;
import com.yami.shop.dao.YxPtglMapper;
import com.yami.shop.dao.YxPtspMapper;
import com.yami.shop.service.IYxPtglService;
import com.yami.shop.service.ProductService;
import com.yami.shop.service.UserService;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

@Service
@Transactional
public class YxPtglServiceImpl extends ServiceImpl<YxPtglMapper,YxPtgl> implements IYxPtglService  {
    @Autowired
    private YxPtglMapper yxPtglMapper;
    @Autowired
    private YxCtjlMapper yxCtjlMapper;
    @Autowired
    private UserService userService;
    @Autowired
    private YxPtspMapper yxPtspMapper;
    @Autowired
    private ProductService productService;





    /**
     * 查询拼团信息
     *
     * @param ptglid 拼团ID
     * @return 拼团信息
     */
    @Override
    public YxPtgl selectYxPtglById(Long ptglid)
    {
        return yxPtglMapper.selectYxPtglById(ptglid);
    }


    /**
     * 查询拼团列表
     *
     * @param yxPtgl 拼团信息
     * @return 拼团集合
     */
    @Override
    public IPage<YxPtgl> selectYxPtglList(Page<YxPtgl> page, YxPtgl yxPtgl)
    {
        List<YxPtgl> yxPtglList =  yxPtglMapper.selectYxPtglList(new PageAdapter(page),yxPtgl);
        for(YxPtgl yxPtgl2 : yxPtglList){
            if(yxPtgl2.getPtspid() != null){
                YxPtsp yxPtsp = yxPtspMapper.selectYxPtspById(yxPtgl2.getPtspid());
                if(yxPtsp != null){
                    yxPtgl2.setPtj(yxPtsp.getPtj());
                }
                if (yxPtgl2.getPzid() != null){
                    YxCtjl ctjl = yxCtjlMapper.selectYxCtjlById(Long.valueOf(yxPtgl2.getPzid()));
                    if (ctjl != null){
                        User user = userService.getUserByUserId(String.valueOf(ctjl.getUserId()));
                        if (user != null){
                            yxPtgl2.setPic(user.getPic());
                            yxPtgl2.setNickName(user.getNickName());
                        }
                    }
                }
            }
        }
        page.setRecords(yxPtglList);
        page.setSize(yxPtglMapper.getListNumber(yxPtgl));
        return page;
    }

    @Override
    public List<YxPtgl> getYxPtglList(YxPtgl yxPtgl) {
        return yxPtglMapper.getYxPtglList(yxPtgl);
    }

    /**
     * 新增拼团
     *
     * @param yxPtgl 拼团信息
     * @return 结果
     */
    @Override
    public int insertYxPtgl(YxPtgl yxPtgl)
    {
        return yxPtglMapper.insertYxPtgl(yxPtgl);
    }

    /**
     * 修改拼团
     *
     * @param yxPtgl 拼团信息
     * @return 结果
     */
    @Override
    public int updateYxPtgl(YxPtgl yxPtgl)
    {
        return yxPtglMapper.updateYxPtgl(yxPtgl);
    }

    /**
     * 删除拼团对象
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteYxPtglByIds(String ids)
    {
        return yxPtglMapper.deleteYxPtglByIds(Convert.toStrArray(ids));
    }

    /**
     * 查询还在拼团的团队及成员
     *
     * @return 拼团集合
     */
    @Override
    public List<YxPtgl> selectPtzAllPtglAndCtjl(Long goodsid)
    {
        YxPtgl ptgl = new YxPtgl();
        ptgl.setStatus("0"); //拼团中
        ptgl.setGoodsid(goodsid); //商品id
        return null;
    }

    /**
     * 查询已拼团成功卖出的商品数量
     *
     * @return 拼团集合
     */
    @Override
    public Integer selectPtnumShopSize(Long goodsid)
    {
        Integer ptnum = 0; //已卖出拼团商品的数量
        YxPtgl ptgl = new YxPtgl();
        ptgl.setStatus("1"); //拼团成功
        ptgl.setGoodsid(goodsid); //商品id
        List<YxPtgl> ptgls = yxPtglMapper.getYxPtglList(ptgl);
        if (CollectionUtils.isNotEmpty(ptgls)){
            for (YxPtgl yxPtgl : ptgls){
                //查询团队成员的购买数量
                List<YxCtjl> ctjls = yxCtjlMapper.selectYxCtjlListPtglid(yxPtgl.getPtglid());
                for (YxCtjl ctjl: ctjls){
                    if (ctjl.getNum() != null && ctjl.getNum() != 0){
                        ptnum += ctjl.getNum();
                    }
                }
            }
        }
        return ptnum;
    }

    @Override
    public List<YxPtgl> getPtSuccessedList() {
        return yxPtglMapper.getPtSuccessedList();
    }

    @Override
    public List<YxPtgl> getPtSuccessedListbyProdId(Long prodId) {
        return yxPtglMapper.getPtSuccessedListbyProdId(prodId);
    }

    @Override
    public Long addData(Long prodId,String userId) {
        YxPtgl yxPtglParam = new YxPtgl();
        //根据商品ID查询拼团商品
        YxPtsp yxPtsp = yxPtspMapper.getYxPtspbyProdId(prodId);
        Long ptspid = null;
        if (yxPtsp != null) {
            ptspid = yxPtsp.getPtspid();
        }
        //获取商品图片以及名称
        Product product = productService.getProductByProdId(prodId);
        yxPtglParam.setPtspid(ptspid);
        yxPtglParam.setPzid(userId);
        yxPtglParam.setGoodsid(prodId);
        yxPtglParam.setStatus("0");//状态 0:拼团中 1：平团成功 2:平团失败
        List<YxPtgl> yxPtglList = yxPtglMapper.getYxPtglList(yxPtglParam);
        if (CollectionUtil.isNotEmpty(yxPtglList)) {
            //拼团已经开始，请不要重复开始拼团
            throw new RuntimeException("拼团已经开始，请不要重复拼团");
        } else {
            //封装订单信息
            /* Order order = new Order();
            order.setShopId(shopid);
            order.setProdName(yxPtsp.getGoodsName());
            order.setUserId(userId);*/

            //开团
            YxPtgl yxPtgl = new YxPtgl();
            yxPtgl.setPtspid(ptspid);//拼团商品id
            yxPtgl.setGoodsid(prodId);//商品id
            yxPtgl.setGoodsimg(product.getPic());
            yxPtgl.setGoodsname(product.getProdName());
            yxPtgl.setPtrs(1);//开团，设值为1
            yxPtgl.setCtrs(2);//成团 设值为1
            yxPtgl.setStatus("2");
            yxPtgl.setPzid(userId);
            yxPtgl.setKtsjtime(new Date());
            yxPtglMapper.insertYxPtgl(yxPtgl);
            //插入开团记录
            YxCtjl yxCtjl = new YxCtjl();
            yxCtjl.setPtglId(yxPtgl.getPtglid());
            yxCtjl.setUserId(userId);
            yxCtjl.setGoodsid(prodId);
            yxCtjl.setGoodsimg(product.getPic());
            yxCtjl.setGoodsname(product.getProdName());
            yxCtjl.setCtsjtime(new Date());
            yxCtjl.setZfje(yxPtsp.getPtj());
            yxCtjl.setStatus("2");//状态 0:拼团中 1：平团成功 2:平团失败
            yxCtjl.setNum(1);
            yxCtjlMapper.insertYxCtjl(yxCtjl);
            return yxPtgl.getPtglid();
        }

    }

    @Override
    public void addNewMember(Long ptglid,String userId) {
        YxPtgl yxPtgl = yxPtglMapper.selectYxPtglById(ptglid);
        Long ptspid = null;
        if(yxPtgl!=null){
             ptspid = yxPtgl.getPtspid();
        }
        YxPtsp yxPtsp = yxPtspMapper.selectYxPtspById(ptspid);
        int ctrs = yxPtgl.getCtrs();//成团人数
        //添加参团记录
        YxCtjl yxCtjl = new YxCtjl();
        yxCtjl.setPtglId(yxPtgl.getPtglid());
        yxCtjl.setUserId(userId);
        yxCtjl.setGoodsid(yxPtgl.getGoodsid());
        yxCtjl.setGoodsimg(yxPtgl.getGoodsimg());
        yxCtjl.setGoodsname(yxPtgl.getGoodsname());
        yxCtjl.setZfje(yxPtsp.getPtj());
        yxCtjl.setStatus("2");//状态 0:拼团中 1：平团成功 2:平团失败
        yxCtjl.setCtsjtime(new Date());
        yxCtjl.setNum(1);
        yxCtjlMapper.insertYxCtjl(yxCtjl);
        int ptrs = yxPtgl.getPtrs()+1;
        if(ptrs>=ctrs){//拼团成功
            yxPtgl.setStatus("2");//0:拼团中 1：拼团成功 2:平团失败
            yxPtgl.setPtrs(ptrs);
            yxPtglMapper.updateYxPtgl(yxPtgl);//修改拼团人数
         //   yxCtjlMapper.updateYxCtjlStatusByPtglid("1",ptglid);//拼团成功
        }else{//修改拼团人数
            yxPtgl.setPtrs(ptrs);
            yxPtglMapper.updateYxPtgl(yxPtgl);
        }
    }

    @Override
    public List<YxPtgl> getNotSuccessedList(DateTime lessThanUpdateTime) {
        return yxPtglMapper.getNotSuccessedList(lessThanUpdateTime);
    }


}
